<!DOCTYPE html>
<html>

<head>
  <title>Quarkus - Building applications with Maven</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/guides/maven-tooling" />
  <meta property="og:title" content="Quarkus - Building applications with Maven" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/guides/maven-tooling">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="guides">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="active">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="guide">
  <div class="width-12-12">
    <h1 class="text-caps">Quarkus - Building applications with Maven</h1>
    <div class="hide-mobile toc"><ul class="sectlevel1">
<li><a href="#project-creation">Creating a new project</a></li>
<li><a href="#dealing-with-extensions">Dealing with extensions</a></li>
<li><a href="#development-mode">Development mode</a>
<ul class="sectlevel2">
<li><a href="#remote-development-mode">Remote Development Mode</a></li>
<li><a href="#configuring-development-mode">Configuring Development Mode</a></li>
</ul>
</li>
<li><a href="#debugging">Debugging</a></li>
<li><a href="#import-in-your-ide">Import in your IDE</a></li>
<li><a href="#logging-quarkus-application-build-classpath-tree">Logging Quarkus application build classpath tree</a></li>
<li><a href="#building-a-native-executable">Building a native executable</a>
<ul class="sectlevel2">
<li><a href="#build-a-container-friendly-executable">Build a container friendly executable</a></li>
</ul>
</li>
<li><a href="#build-tool-maven">Maven configuration</a>
<ul class="sectlevel2">
<li><a href="#uber-jar-maven">Uber-Jar Creation</a></li>
<li><a href="#multi-module-maven">Working with multi-module projects</a></li>
</ul>
</li>
<li><a href="#configuration-reference">Configuring the Project Output</a>
<ul class="sectlevel2">
<li><a href="#custom-test-configuration-profile">Custom test configuration profile in JVM mode</a></li>
</ul>
</li>
</ul></div>
    <div>
      <div class="sect1">
<h2 id="project-creation"><a class="anchor" href="#project-creation"></a>Creating a new project</h2>
<div class="sectionbody">
<div class="paragraph">
<p>With Maven, you can scaffold a new project with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">mvn io.quarkus:quarkus-maven-plugin:1.7.0.Final:create \
    -DprojectGroupId=my-groupId \
    -DprojectArtifactId=my-artifactId \
    -DprojectVersion=my-version \
    -DclassName="org.my.group.MyResource"</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
If you just launch <code>mvn io.quarkus:quarkus-maven-plugin:1.7.0.Final:create</code> the Maven plugin asks
for user inputs. You can disable (and use default values) this interactive mode by passing <code>-B</code> to the Maven command.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The following table lists the attributes you can pass to the <code>create</code> command:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Attribute</th>
<th class="tableblock halign-left valign-top">Default Value</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>projectGroupId</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.acme.sample</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The group id of the created project</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>projectArtifactId</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>mandatory</em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The artifact id of the created project. Not passing it triggers the interactive mode.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>projectVersion</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1.0-SNAPSHOT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The version of the created project</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>platformGroupId</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>io.quarkus</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The group id of the target platform. Given that all the existing platforms are coming from <code>io.quarkus</code> this one won&#8217;t practically be used explicitly. But it&#8217;s still an option.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>platformArtifactId</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quarkus-universe-bom</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The artifact id of the target platform BOM. It should be <code>quarkus-bom</code> in order to use the locally built Quarkus.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>platformVersion</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If it&#8217;s not specified, the latest one will be resolved.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The version of the platform you want the project to use. It can also accept a version range, in which case the latest from the specified range will be used.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>className</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Not created if omitted</em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The fully qualified name of the generated resource</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>path</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>/hello</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The resource path, only relevant if <code>className</code> is set.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>extensions</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>[]</em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The list of extensions to add to the project (comma-separated)</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>By default, the command will target the latest version of <code>quarkus-universe-bom</code> (unless specific coordinates have been specified). If you run offline however, it will look for the latest locally available and if <code>quarkus-universe-bom</code> (satisfying the default version range which is currently up to 2.0) is not available locally, it will fallback to the bundled platform based on <code>quarkus-bom</code> (the version will match the version of the plugin).</p>
</div>
<div class="paragraph">
<p>If you decide to generate a REST resource (using the <code>className</code> attribute), the endpoint is exposed at: <code><a href="http://localhost:8080/$path" class="bare">http://localhost:8080/$path</a></code>.
If you use the default <code>path</code>, the URL is: <a href="http://localhost:8080/hello" class="bare">http://localhost:8080/hello</a>.</p>
</div>
<div class="paragraph">
<p>The project is generated in a directory named after the passed artifactId.
If the directory already exists, the generation fails.</p>
</div>
<div class="paragraph">
<p>A pair of Dockerfiles for native and jvm mode are also generated in <code>src/main/docker</code>.
Instructions to build the image and run the container are written in those Dockerfiles.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="dealing-with-extensions"><a class="anchor" href="#dealing-with-extensions"></a>Dealing with extensions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>From inside a Quarkus project, you can obtain a list of the available extensions with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw quarkus:list-extensions</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can enable an extension using:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw quarkus:add-extension -Dextensions="hibernate-validator"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Extensions are passed using a comma-separated list.</p>
</div>
<div class="paragraph">
<p>The extension name is the GAV name of the extension: e.g. <code>io.quarkus:quarkus-agroal</code>.
But you can pass a partial name and Quarkus will do its best to find the right extension.
For example, <code>agroal</code>, <code>Agroal</code> or <code>agro</code>  will expand to <code>io.quarkus:quarkus-agroal</code>.
If no extension is found or if more than one extensions match, you will see a red check mark  ❌ in the command result.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">$ ./mvnw quarkus:add-extensions -Dextensions=jdbc,agroal,non-exist-ent
[...]
❌ Multiple extensions matching 'jdbc'
     * io.quarkus:quarkus-jdbc-h2
     * io.quarkus:quarkus-jdbc-mariadb
     * io.quarkus:quarkus-jdbc-postgresql
     Be more specific e.g using the exact name or the full gav.
✅ Adding extension io.quarkus:quarkus-agroal
❌ Cannot find a dependency matching 'non-exist-ent', maybe a typo?
[...]</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can install all extensions which match a globbing pattern :</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw quarkus:add-extension -Dextensions="hibernate-*"</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="development-mode"><a class="anchor" href="#development-mode"></a>Development mode</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Quarkus comes with a built-in development mode.
Run your application with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw compile quarkus:dev</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can then update the application sources, resources and configurations.
The changes are automatically reflected in your running application.
This is great to do development spanning UI and database as you see changes reflected immediately.</p>
</div>
<div class="paragraph">
<p><code>quarkus:dev</code> enables hot deployment with background compilation, which means
that when you modify your Java files or your resource files and refresh your browser these changes will automatically take effect.
This works too for resource files like the configuration property file.
The act of
refreshing the browser triggers a scan of the workspace, and if any changes are detected the Java files are compiled,
and the application is redeployed, then your request is serviced by the redeployed application. If there are any issues
with compilation or deployment an error page will let you know.</p>
</div>
<div class="paragraph">
<p>Hit <code>CTRL+C</code> to stop the application.</p>
</div>
<div class="sect2">
<h3 id="remote-development-mode"><a class="anchor" href="#remote-development-mode"></a>Remote Development Mode</h3>
<div class="paragraph">
<p>It is possible to use development mode remotely, so that you can run Quarkus in a container environment (such as Openshift)
and have changes made to your local files become immediately visible.</p>
</div>
<div class="paragraph">
<p>This allows you to develop in the same environment you will actually run your app in, and with access to the same services.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
Do not use this in production. This should only be used in a development environment. You should not run production application in dev mode.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>To do this you must build a mutable application, using the <code>mutable-jar</code> format. Set the following properties in <code>application.xml</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">quarkus.package.type=mutable-jar <i class="conum" data-value="1"></i><b>(1)</b>
quarkus.live-reload.password=changeit <i class="conum" data-value="2"></i><b>(2)</b>
quarkus.live-reload.url=http://my.cluster.host.com:8080 <i class="conum" data-value="3"></i><b>(3)</b></code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>This tells Quarkus to use the mutable-jar format. Mutable applications also include the deployment time parts of Quarkus,
so they take up a bit more disk space. If run normally they start just as fast and use the same memory as an immutable application,
however they can also be started in dev mode.</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>The password that is used to secure communication between the remote side and the local side.</td>
</tr>
<tr>
<td><i class="conum" data-value="3"></i><b>3</b></td>
<td>The URL that your app is going to be running in dev mode at. This is only needed on the local side, so you
may want to leave it out of the properties file and specify it as a system property on the command line.</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Before you start Quarkus on the remote host set the environment variable <code>QUARKUS_LAUNCH_DEVMODE=true</code>. If you are
on bare metal you can just set this via the <code>export QUARKUS_LAUNCH_DEVMODE=true</code> command, if you are running using
docker start the image with <code>-e QUARKUS_LAUNCH_DEVMODE=true</code>. When the application starts you should now see the following
line in the logs: <code>Profile dev activated. Live Coding activated</code>.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The remote side does not need to include Maven or any other development tools. The normal <code>fast-jar</code> Dockerfile
that is generated with a new Quarkus application is all you need. If you are using bare metal launch the Quarkus runner
jar, do not attempt to run normal devmode.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Now you need to connect your local agent to the remote host, using the <code>remote-dev</code> command:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw quarkus:remote-dev -Dquarkus.live-reload.url=http://my-remote-host:8080</code></pre>
</div>
</div>
<div class="paragraph">
<p>Now every time you refresh the browser you should see any changes you have made locally immediately visible in the remote
app. This is done via a HTTP based long polling transport, that will synchronize your local workspace and the remote
application via HTTP calls.</p>
</div>
<div class="paragraph">
<p>If you do not want to use the HTTP feature then you can simply run the <code>remote-dev</code> command without specifying the URL.
In this mode the command will continuously rebuild the local application, so you can use an external tool such as odo or
rsync to sync to the remote application.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
It is recommended you use SSL when using remote dev mode, however even if you are using an unencrypted connection
your password is never sent directly over the wire. For the initial connection request the password is hashed with the
initial state data, and subsequent requests hash it with a random session id generated by the server and any body contents
for POST requests, and the path for DELETE requests, as well as an incrementing counter to prevent replay attacks.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="configuring-development-mode"><a class="anchor" href="#configuring-development-mode"></a>Configuring Development Mode</h3>
<div class="paragraph">
<p>By default, the Maven plugin picks up compiler flags to pass to
<code>javac</code> from <code>maven-compiler-plugin</code>.</p>
</div>
<div class="paragraph">
<p>If you need to customize the compiler flags used in development mode,
add a <code>configuration</code> section to the <code>plugin</code> block and set the
<code>compilerArgs</code> property just as you would when configuring
<code>maven-compiler-plugin</code>.  You can also set <code>source</code>, <code>target</code>, and
<code>jvmArgs</code>.  For example, to pass <code>--enable-preview</code> to both the JVM
and <code>javac</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">&lt;plugin&gt;
  &lt;groupId&gt;io.quarkus&lt;/groupId&gt;
  &lt;artifactId&gt;quarkus-maven-plugin&lt;/artifactId&gt;
  &lt;version&gt;${quarkus-plugin.version}&lt;/version&gt;

  &lt;configuration&gt;
    &lt;source&gt;${maven.compiler.source}&lt;/source&gt;
    &lt;target&gt;${maven.compiler.target}&lt;/target&gt;
    &lt;compilerArgs&gt;
      &lt;arg&gt;--enable-preview&lt;/arg&gt;
    &lt;/compilerArgs&gt;
    &lt;jvmArgs&gt;--enable-preview&lt;/jvmArgs&gt;
  &lt;/configuration&gt;

  ...
&lt;/plugin&gt;</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="debugging"><a class="anchor" href="#debugging"></a>Debugging</h2>
<div class="sectionbody">
<div class="paragraph">
<p>In development mode, Quarkus starts by default with debug mode enabled, listening to port <code>5005</code> without suspending the JVM.</p>
</div>
<div class="paragraph">
<p>This behavior can be changed by giving the <code>debug</code> system property one of the following values:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>false</code> - the JVM will start with debug mode disabled</p>
</li>
<li>
<p><code>true</code> - The JVM is started in debug mode and will be listening on port <code>5005</code></p>
</li>
<li>
<p><code>client</code> - the JVM will start in client mode and attempt to connect to <code>localhost:5005</code></p>
</li>
<li>
<p><code>{port}</code> - The JVM is started in debug mode and will be listening on <code>{port}</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>An additional system property <code>suspend</code> can be used to suspend the JVM, when launched in debug mode. <code>suspend</code> supports the following values:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>y</code> or <code>true</code> - The debug mode JVM launch is suspended</p>
</li>
<li>
<p><code>n</code> or <code>false</code> - The debug mode JVM is started without suspending</p>
</li>
</ul>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
<div class="paragraph">
<p>You can also run a Quarkus application in debug mode with a suspended JVM using <code>./mvnw compile quarkus:dev -Ddebug</code> which is a shorthand for <code>./mvnw compile quarkus:dev -Ddebug=true</code>.</p>
</div>
<div class="paragraph">
<p>Then, attach your debugger to <code>localhost:5005</code>.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="import-in-your-ide"><a class="anchor" href="#import-in-your-ide"></a>Import in your IDE</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Once you have a <a href="#project-creation">project generated</a>, you can import it in your favorite IDE.
The only requirement is the ability to import a Maven project.</p>
</div>
<div class="paragraph">
<p><strong>Eclipse</strong></p>
</div>
<div class="paragraph">
<p>In Eclipse, click on: <code>File &#8594; Import</code>.
In the wizard, select: <code>Maven &#8594; Existing Maven Project</code>.
On the next screen, select the root location of the project.
The next screen list the found modules; select the generated project and click on <code>Finish</code>. Done!</p>
</div>
<div class="paragraph">
<p>In a separated terminal, run <code>./mvnw compile quarkus:dev</code>, and enjoy a highly productive environment.</p>
</div>
<div class="paragraph">
<p><strong>IntelliJ</strong></p>
</div>
<div class="paragraph">
<p>In IntelliJ:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>From inside IntelliJ select <code>File &#8594; New &#8594; Project From Existing Sources&#8230;&#8203;</code> or, if you are on the welcome dialog, select <code>Import project</code>.</p>
</li>
<li>
<p>Select the project root</p>
</li>
<li>
<p>Select <code>Import project from external model</code> and <code>Maven</code></p>
</li>
<li>
<p>Next a few times (review the different options if needed)</p>
</li>
<li>
<p>On the last screen click on Finish</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>In a separated terminal or in the embedded terminal, run <code>./mvnw compile quarkus:dev</code>. Enjoy!</p>
</div>
<div class="paragraph">
<p><strong>Apache NetBeans</strong></p>
</div>
<div class="paragraph">
<p>In NetBeans:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Select <code>File &#8594; Open Project</code></p>
</li>
<li>
<p>Select the project root</p>
</li>
<li>
<p>Click on <code>Open Project</code></p>
</li>
</ol>
</div>
<div class="paragraph">
<p>In a separated terminal or the embedded terminal, go to the project root and run <code>./mvnw compile quarkus:dev</code>. Enjoy!</p>
</div>
<div class="paragraph">
<p><strong>Visual Studio Code</strong></p>
</div>
<div class="paragraph">
<p>Open the project directory in VS Code. If you have installed the Java Extension Pack (grouping a set of Java extensions), the project is loaded as a Maven project.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="logging-quarkus-application-build-classpath-tree"><a class="anchor" href="#logging-quarkus-application-build-classpath-tree"></a>Logging Quarkus application build classpath tree</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Usually, dependencies of an application (which is a Maven project) could be displayed using <code>mvn dependency:tree</code> command. In case of a Quarkus application, however, this command will list only the runtime dependencies of the application.
Given that the Quarkus build process adds deployment dependencies of the extensions used in the application to the original application classpath, it could be useful to know which dependencies and which versions end up on the build classpath.
Luckily, the <code>quarkus-bootstrap</code> Maven plugin includes the <code>build-tree</code> goal which displays the build dependency tree for the application.</p>
</div>
<div class="paragraph">
<p>To be able to use it, the following plugin configuration has to be added to the <code>pom.xml</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">            &lt;plugin&gt;
                &lt;groupId&gt;io.quarkus&lt;/groupId&gt;
                &lt;artifactId&gt;quarkus-bootstrap-maven-plugin&lt;/artifactId&gt;
                &lt;version&gt;${quarkus-plugin.version}&lt;/version&gt;
            &lt;/plugin&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Now you should be able to execute <code>./mvnw quarkus-bootstrap:build-tree</code> on your project and see something like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">[INFO] --- quarkus-bootstrap-maven-plugin:1.7.0.Final:build-tree (default-cli) @ getting-started ---
[INFO] org.acme:getting-started:jar:1.0-SNAPSHOT
[INFO] └─ io.quarkus:quarkus-resteasy-deployment:jar:1.7.0.Final (compile)
[INFO]    ├─ io.quarkus:quarkus-resteasy-server-common-deployment:jar:1.7.0.Final (compile)
[INFO]    │  ├─ io.quarkus:quarkus-core-deployment:jar:1.7.0.Final (compile)
[INFO]    │  │  ├─ commons-beanutils:commons-beanutils:jar:1.9.3 (compile)
[INFO]    │  │  │  ├─ commons-logging:commons-logging:jar:1.2 (compile)
[INFO]    │  │  │  └─ commons-collections:commons-collections:jar:3.2.2 (compile)
...</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="building-a-native-executable"><a class="anchor" href="#building-a-native-executable"></a>Building a native executable</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Native executables make Quarkus applications ideal for containers and serverless workloads.</p>
</div>
<div class="paragraph">
<p>Make sure to have <code>GRAALVM_HOME</code> configured and pointing to GraalVM version 20.1.0.
Verify that your <code>pom.xml</code> has the proper <code>native</code> profile (see <a href="#build-tool-maven">Maven configuration</a>).</p>
</div>
<div class="paragraph">
<p>Create a native executable using: <code>./mvnw package -Pnative</code>.
A native executable will be present in <code>target/</code>.</p>
</div>
<div class="paragraph">
<p>To run Integration Tests on the native executable, make sure to have the proper Maven plugin configured (see <a href="#build-tool-maven">Maven configuration</a>) and launch the <code>verify</code> goal.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw verify -Pnative
...
[quarkus-quickstart-runner:50955]     universe:     391.96 ms
[quarkus-quickstart-runner:50955]      (parse):     904.37 ms
[quarkus-quickstart-runner:50955]     (inline):   1,143.32 ms
[quarkus-quickstart-runner:50955]    (compile):   6,228.44 ms
[quarkus-quickstart-runner:50955]      compile:   9,130.58 ms
[quarkus-quickstart-runner:50955]        image:   2,101.42 ms
[quarkus-quickstart-runner:50955]        write:     803.18 ms
[quarkus-quickstart-runner:50955]      [total]:  33,520.15 ms
[INFO]
[INFO] --- maven-failsafe-plugin:2.22.0:integration-test (default) @ quarkus-quickstart-native ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.acme.quickstart.GreetingResourceIT
Executing [/Users/starksm/Dev/JBoss/Quarkus/starksm64-quarkus-quickstarts/getting-started-native/target/quarkus-quickstart-runner, -Dquarkus.http.port=8081, -Dtest.url=http://localhost:8081, -Dquarkus.log.file.path=target/quarkus.log]
2019-02-28 16:52:42,020 INFO  [io.quarkus] (main) Quarkus started in 0.007s. Listening on: http://localhost:8080
2019-02-28 16:52:42,021 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.081 s - in org.acme.quickstart.GreetingResourceIT
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="build-a-container-friendly-executable"><a class="anchor" href="#build-a-container-friendly-executable"></a>Build a container friendly executable</h3>
<div class="paragraph">
<p>The native executable will be specific to your operating system.
To create an executable that will run in a container, use the following:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">./mvnw package -Dnative -Dquarkus.native.container-build=true</code></pre>
</div>
</div>
<div class="paragraph">
<p>The produced executable will be a 64 bit Linux executable, so depending on your operating system it may no longer be runnable.
However, it&#8217;s not an issue as we are going to copy it to a Docker container.
Note that in this case the build itself runs in a Docker container too, so you don&#8217;t need to have GraalVM installed locally.</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
<div class="paragraph">
<p>By default, the native executable will be generated using the <code>quay.io/quarkus/ubi-quarkus-native-image:20.1.0-java11</code> Docker image.</p>
</div>
<div class="paragraph">
<p>If you want to build a native executable with a different Docker image (for instance to use a different GraalVM version),
use the <code>-Dquarkus.native.builder-image=&lt;image name&gt;</code> build argument.</p>
</div>
<div class="paragraph">
<p>The list of the available Docker images can be found on <a href="https://quay.io/repository/quarkus/ubi-quarkus-native-image?tab=tags">quay.io</a>.
Be aware that a given Quarkus version might not be compatible with all the images available.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>You can follow the <a href="building-native-image">Build a native executable guide</a> as well as <a href="deploying-to-kubernetes">Deploying Application to Kubernetes and OpenShift</a> for more information.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="build-tool-maven"><a class="anchor" href="#build-tool-maven"></a>Maven configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If you have not used <a href="#project-creation">project scaffolding</a>, add the following elements in your <code>pom.xml</code></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">&lt;dependencyManagement&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt; <i class="conum" data-value="1"></i><b>(1)</b>
            &lt;groupId&gt;io.quarkus&lt;/groupId&gt;
            &lt;artifactId&gt;quarkus-bom&lt;/artifactId&gt;
            &lt;version&gt;${quarkus.platform.version}&lt;/version&gt;
            &lt;type&gt;pom&lt;/type&gt;
            &lt;scope&gt;import&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;

&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt; <i class="conum" data-value="2"></i><b>(2)</b>
            &lt;groupId&gt;io.quarkus&lt;/groupId&gt;
            &lt;artifactId&gt;quarkus-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;${quarkus-plugin.version}&lt;/version&gt;
            &lt;executions&gt;
                &lt;execution&gt;
                    &lt;goals&gt;
                        &lt;goal&gt;build&lt;/goal&gt;
                    &lt;/goals&gt;
                &lt;/execution&gt;
            &lt;/executions&gt;
        &lt;/plugin&gt;
        &lt;plugin&gt; <i class="conum" data-value="3"></i><b>(3)</b>
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
            &lt;version&gt;${surefire-plugin.version}&lt;/version&gt;
            &lt;configuration&gt;
                &lt;systemPropertyVariables&gt;
                    &lt;java.util.logging.manager&gt;org.jboss.logmanager.LogManager&lt;/java.util.logging.manager&gt;
                    &lt;maven.home&gt;${maven.home}&lt;/maven.home&gt;
                &lt;/systemPropertyVariables&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;

&lt;profiles&gt;
    &lt;profile&gt; <i class="conum" data-value="4"></i><b>(4)</b>
        &lt;id&gt;native&lt;/id&gt;
        &lt;properties&gt; <i class="conum" data-value="5"></i><b>(5)</b>
            &lt;quarkus.package.type&gt;native&lt;/quarkus.package.type&gt;
        &lt;/properties&gt;
        &lt;build&gt;
            &lt;plugins&gt;
                &lt;plugin&gt; <i class="conum" data-value="6"></i><b>(6)</b>
                    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                    &lt;artifactId&gt;maven-failsafe-plugin&lt;/artifactId&gt;
                    &lt;version&gt;${surefire-plugin.version}&lt;/version&gt;
                    &lt;executions&gt;
                        &lt;execution&gt;
                            &lt;goals&gt;
                                &lt;goal&gt;integration-test&lt;/goal&gt;
                                &lt;goal&gt;verify&lt;/goal&gt;
                            &lt;/goals&gt;
                            &lt;configuration&gt;
                                &lt;systemPropertyVariables&gt;
                                    &lt;native.image.path&gt;${project.build.directory}/${project.build.finalName}-runner&lt;/native.image.path&gt;
                                    &lt;java.util.logging.manager&gt;org.jboss.logmanager.LogManager&lt;/java.util.logging.manager&gt;
                                    &lt;maven.home&gt;${maven.home}&lt;/maven.home&gt;
                                &lt;/systemPropertyVariables&gt;
                            &lt;/configuration&gt;
                        &lt;/execution&gt;
                    &lt;/executions&gt;
                &lt;/plugin&gt;
            &lt;/plugins&gt;
        &lt;/build&gt;
    &lt;/profile&gt;
&lt;/profiles&gt;</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>Optionally use a BOM file to omit the version of the different Quarkus dependencies.</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>Use the Quarkus Maven plugin that will hook into the build process.</td>
</tr>
<tr>
<td><i class="conum" data-value="3"></i><b>3</b></td>
<td>Add system properties to <code>maven-surefire-plugin</code>.<br>
<code>maven.home</code> is only required if you have custom configuration in <code>${maven.home}/conf/settings.xml</code>.</td>
</tr>
<tr>
<td><i class="conum" data-value="4"></i><b>4</b></td>
<td>Use a specific <code>native</code> profile for native executable building.</td>
</tr>
<tr>
<td><i class="conum" data-value="5"></i><b>5</b></td>
<td>Enable the <code>native</code> package type. The build will therefore produce a native executable.</td>
</tr>
<tr>
<td><i class="conum" data-value="6"></i><b>6</b></td>
<td>If you want to test your native executable with Integration Tests, add the following plugin configuration. Test names <code>*IT</code> and annotated <code>@NativeImageTest</code> will be run against the native executable. See the <a href="building-native-image">Native executable guide</a> for more info.</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="uber-jar-maven"><a class="anchor" href="#uber-jar-maven"></a>Uber-Jar Creation</h3>
<div class="paragraph">
<p>Quarkus Maven plugin supports the generation of Uber-Jars by specifying a <code>quarkus.package.type=uber-jar</code> configuration option in your <code>application.properties</code>.</p>
</div>
<div class="paragraph">
<p>The original jar will still be present in the <code>target</code> directory but it will be renamed to contain the <code>.original</code> suffix.</p>
</div>
<div class="paragraph">
<p>When building an Uber-Jar you can specify entries that you want to exclude from the generated jar by using the <code>quarkus.package.ignored-entries</code> configuration
option, this takes a comma separated list of entries to ignore.</p>
</div>
<div class="paragraph">
<p>Uber-Jar creation by default excludes <a href="https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html">signature files</a> that might be present in the dependencies of the application.</p>
</div>
<div class="paragraph">
<p>Uber-Jar&#8217;s final name is configurable via a Maven&#8217;s build settings <code>finalName</code> option.</p>
</div>
</div>
<div class="sect2">
<h3 id="multi-module-maven"><a class="anchor" href="#multi-module-maven"></a>Working with multi-module projects</h3>
<div class="paragraph">
<p>By default, Quarkus will not discover CDI beans inside another module.</p>
</div>
<div class="paragraph">
<p>The best way to enable CDI bean discovery for a module in a multi-module project would be to include the <code>jandex-maven-plugin</code>,
unless it is the main application module already configured with the quarkus-maven-plugin, in which case it will indexed automatically.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">&lt;build&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.jboss.jandex&lt;/groupId&gt;
      &lt;artifactId&gt;jandex-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;1.0.7&lt;/version&gt;
      &lt;executions&gt;
        &lt;execution&gt;
          &lt;id&gt;make-index&lt;/id&gt;
          &lt;goals&gt;
            &lt;goal&gt;jandex&lt;/goal&gt;
          &lt;/goals&gt;
        &lt;/execution&gt;
      &lt;/executions&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>More information on this topic can be found on the <a href="cdi-reference#bean_discovery">Bean Discovery</a> section of the CDI guide.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="configuration-reference"><a class="anchor" href="#configuration-reference"></a>Configuring the Project Output</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are a several configuration options that will define what the output of your project build will be.
These are provided in <code>application.properties</code> the same as any other config property.</p>
</div>
<div class="paragraph">
<p>The properties are shown below:</p>
</div>
<div class="paragraph configuration-legend">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> Configuration property fixed at build time - All other configuration properties are overridable at runtime</p>
</div>
<table class="tableblock frame-all grid-all stretch configuration-reference">
<colgroup>
<col style="width: 80%;">
<col style="width: 10%;">
<col style="width: 10%;">
</colgroup>
<tbody>
<tr>
<th class="tableblock halign-left valign-top"><p class="tableblock"><a id="quarkus-package-pkg-package-config_configuration"></a><a href="#quarkus-package-pkg-package-config_configuration">Configuration property</a></p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Type</p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Default</p></th>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.type"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.type">quarkus.package.type</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The requested output type. The default built in types are 'jar', 'fast-jar' (a prototype more performant version of the default 'jar' type), 'uber-jar' and 'native'.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>jar</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.manifest.add-implementation-entries"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.manifest.add-implementation-entries">quarkus.package.manifest.add-implementation-entries</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>If the Implementation information should be included in the runner jar&#8217;s MANIFEST.MF.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.main-class"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.main-class">quarkus.package.main-class</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The entry point of the application. This can either be a a fully qualified name of a standard Java class with a main method, or <code>io.quarkus.runtime.QuarkusApplication</code>. If your application has main classes annotated with <code>io.quarkus.runtime.annotations.QuarkusMain</code> then this can also reference the name given in the annotation, to avoid the need to specify fully qualified names in the config.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.user-configured-ignored-entries"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.user-configured-ignored-entries">quarkus.package.user-configured-ignored-entries</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Files that should not be copied to the output artifact</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">list of string</p></td>
<td class="tableblock halign-left valign-middle"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.runner-suffix"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.runner-suffix">quarkus.package.runner-suffix</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The suffix that is applied to the runner jar and native images</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>-runner</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.output-directory"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.output-directory">quarkus.package.output-directory</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The output folder in which to place the output, this is resolved relative to the build systems target directory.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.output-name"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.output-name">quarkus.package.output-name</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The name of the final artifact</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.create-appcds"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.create-appcds">quarkus.package.create-appcds</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Whether to automate the creation of AppCDS. This has not effect when a native binary is needed and will be ignored in that case. Furthermore, this option only works for Java 11&#43; and is considered experimental for the time being. Finally, care must be taken to use the same exact JVM version when building and running the application.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.user-providers-directory"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.user-providers-directory">quarkus.package.user-providers-directory</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>This is an advanced option that only takes effect for the mutable-jar format. If this is specified a directory of this name will be created in the jar distribution. Users can place jar files in this directory, and when re-augmentation is performed these will be processed and added to the class-path. Note that before reaugmentation has been performed these jars will be ignored, and if they are updated the app should be reaugmented again.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-package-pkg-package-config_quarkus.package.manifest.manifest-sections-manifest-sections"></a><code><a href="#quarkus-package-pkg-package-config_quarkus.package.manifest.manifest-sections-manifest-sections">quarkus.package.manifest.manifest-sections</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Custom manifest sections to be added to the MANIFEST.MF file. An example of the user defined property: quarkus.package.manifest.manifest-sections.{Section-Name}.{Entry-Key1}={Value1} quarkus.package.manifest.manifest-sections.{Section-Name}.{Entry-Key2}={Value2}</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>Map&lt;String,Map&lt;String,String&gt;&gt;</code></p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">required <span class="icon"><i class="fa fa-exclamation-circle" title="Configuration property is required"></i></span></p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="custom-test-configuration-profile"><a class="anchor" href="#custom-test-configuration-profile"></a>Custom test configuration profile in JVM mode</h3>
<div class="paragraph">
<p>By default, Quarkus tests in JVM mode are run using the <code>test</code> configuration profile. If you are not familiar with Quarkus
configuration profiles, everything you need to know is explained in the
<a href="config#configuration-profiles">Configuration Profiles Documentation</a>.</p>
</div>
<div class="paragraph">
<p>It is however possible to use a custom configuration profile for your tests with the Maven Surefire and Maven Failsafe
configurations shown below. This can be useful if you need for example to run some tests using a specific database which is not
your default testing database.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">&lt;project&gt;
  [...]
  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
        &lt;version&gt;${surefire-plugin.version}&lt;/version&gt;
        &lt;configuration&gt;
          &lt;systemPropertyVariables&gt;
            &lt;quarkus.test.profile&gt;foo&lt;/quarkus.test.profile&gt; <i class="conum" data-value="1"></i><b>(1)</b>
            &lt;buildDirectory&gt;${project.build.directory}&lt;/buildDirectory&gt;
            [...]
          &lt;/systemPropertyVariables&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-failsafe-plugin&lt;/artifactId&gt;
        &lt;version&gt;${failsafe-plugin.version}&lt;/version&gt;
        &lt;configuration&gt;
          &lt;systemPropertyVariables&gt;
            &lt;quarkus.test.profile&gt;foo&lt;/quarkus.test.profile&gt; <i class="conum" data-value="1"></i><b>(1)</b>
            &lt;buildDirectory&gt;${project.build.directory}&lt;/buildDirectory&gt;
            [...]
          &lt;/systemPropertyVariables&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;
  [...]
&lt;/project&gt;</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>The <code>foo</code> configuration profile will be used to run the tests.</td>
</tr>
</table>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
<div class="paragraph">
<p>It is not possible to use a custom test configuration profile in native mode for now. Native tests are always run using the
<code>prod</code> profile.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
